//
// Created by wyh on 2025-07-23 23:17.
//
#include <iostream>
#include "serialize/data_stream.h"
#include "serialize/serializable.h"

using namespace std;
using namespace wyh::serialize;

//class A : public Serializable
//{
//public:
//    A()=default;
//    A(const string &name,int age):m_name(name),m_age(age){}
//
//    ~A() = default;
//
//    //序列化
//    virtual void serialize(DataStream &stream) const
//    {
//        char type = DataStream::CUSTOM;
//        stream.write((char *) &type, sizeof(char));
//        stream.write(m_name);
//        stream.write(m_age);
//    }
//
//    //反序列化
//    virtual bool unserialize(DataStream &stream)
//    {
//        char type;
//        stream.read((char *) &type, sizeof(char));
//        if (type != DataStream::CUSTOM)
//        {
//            return false;
//        }
//
//        stream.read(m_name);
//        stream.read(m_age);
//
//        return true;
//    }
//
//    void show() const
//    {
//        cout<<"name="<<m_name<<",age="<<m_age<<endl;
//    }
//
//private:
//    string m_name;
//    int m_age;
//};

class A : public Serializable
{
public:
    SERIALIZE(m_name,m_age);
public:
    A()=default;
    A(const string &name,int age):m_name(name),m_age(age){}

    ~A() = default;

    void show() const
    {
        cout<<"name="<<m_name<<",age="<<m_age<<endl;
    }

private:
    string m_name;
    int m_age;
};

//int main(int argc, char **argv)
//{
//    DataStream ds;
////    ds.write(true);
////    ds.write(123);
////    ds.write("hello world");
//
//    ds << true << 2334 << "hello world";
//
//    ds.show();
//
//    cout << endl << "------------------------------" << endl;
//
//    bool b;
//    int i;
//    string s;
//
////    ds.read(b);
////    ds.read(i);
////    ds.read(s);
//    ds >> b >> i >> s;
//
//    cout << "b=" << b << ",i=" << i << ",s=" << s << endl;
//
//    cout << endl << "------------------------------" << endl;
//    vector<int> v{1, 2, 3};
//
//    DataStream ds1;
//    ds1.write(v);
//    ds1 << v;
//
//    vector<int> v2;
////    ds1.read(v2);
//    ds1 >> v2;
//
//    for (auto a: v2)
//    {
//        cout << a << endl;
//    }
//
//    cout << endl << "------------------------------" << endl;
//    A a("jack", 16);
//    DataStream ds2;
//
//    a.serialize(ds2);
//
//    A a2;
//    a2.unserialize(ds2);
//    a2.show();
//
//    cout << endl << "------------------------------" << endl;
//    A a3("tom", 27);
//    DataStream ds3;
//
//    ds3<<a3;
//
//    A a4;
//    ds3>>a4;
//
//    a4.show();
//
//    cout << endl << "------------------------------" << endl;
//    ds.save("./../a.out");
//
//    DataStream ds4;
//    ds4.load("./../a.out");
//    ds4.show();
//
//    return 0;
//}

int main(int argc, char **argv)
{
    int n = 0x12345678;
    char str[4];
    memcpy(str, &n, sizeof(int));
    for (int i = 0; i < sizeof(int); i++)
    {
        printf("%x\n", str[i]);
    }

    if (str[0] == 0x12)
    {
        printf("BIG\n");
    }
    else if (str[0] == 0x78)
    {
        printf("LITTLE\n");
    }
    else
    {
        printf("UNKNOW\n");
    }

    return 0;
}